package com.zsrt.java.day20170102.lh.collegesorequerysystem;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

/**
 * 
 * 1.1 录入考生信息 
		 *      1.2 修改考生信息
		 *      1.3 删除考生信息
		 *      1.4 查询考生信息 
 * @author My
 *
 */
public class CollegeList {
	
	private List<User> userList;
	
	
	
	public List<User> getUserList() {
		return userList;
	}

	public CollegeList(){
		userList=new ArrayList<User>();
	}
	
	/**
	 * 添加考生信息
	 * @param user
	 */
	public void add(User user){
		userList.add(user);
	}
	
	/**
	 * 关键字修改
	 * @param keyWork
	 */
	public Boolean update(String keyWork,String province,String city){
		
		//名字修改
		boolean falg=false;
	
		//先要查找到
		for(int i=0;i<userList.size();i++){
			String name = userList.get(i).getName();
			if(keyWork.equals(name)){
				userList.get(i).setProvince(province);
				userList.get(i).setCity(city);
				falg=true;
			}
		}
		return falg;
	}
	
	
	/**
	 * 删除学生信息
	 * @param cardNum 准考证号码
	 * @return 是否删除成功
	 */
	public Boolean delete(String cardNum){
		
		boolean falg=false;
		
		//先要查找到
		for(int i=0;i<userList.size();i++){
			String num = userList.get(i).getCardNum();
			if(cardNum.equals(num)){
				userList.remove(i);
				falg=true;
			}
		}
		return falg;
	}
	
	/**
	 * 1 根据城市查询
	 *2 根据姓名查询
	 *3 根据准考证号码查询
	 * 4 返回上一层
	 * 
	 * 
	 * 
	 * @param no  查询代码
	 * @param keyWord 关键字
	 */
	public List<User> findBykeyWord(int no,String keyWord){
		
		List<User> newUserList=new ArrayList<User>();
		
		//根据城市查询
		if(no==1){
			for(int i=0;i<userList.size();i++){
				
				//城市等于关键字
				if(keyWord.equals(userList.get(i).getCity())){
					newUserList.add(userList.get(i));
				}
			}
			
		//根据姓名查询
		}else if(no==2){
				for(int i=0;i<userList.size();i++){
				
				//名字等于关键字
				if(keyWord.equals(userList.get(i).getName())){
					newUserList.add(userList.get(i));
				}
			}
				
		//根据准考证号码查询	
		}else if(no==3){
			for(int i=0;i<userList.size();i++){
				
				//准考证号码等于关键字
				if(keyWord.equals(userList.get(i).getCardNum())){
					newUserList.add(userList.get(i));
				}
			}
		}
		
		return newUserList;
	}
	
	/**
	 * 个人信息包括分数
	 * @param cardNum 准考证号码
	 */
	public void seeOneself(String cardNum){
		
		for(int i=0;i<userList.size();i++){
			
			//准考证号码
			if(cardNum.equals(userList.get(i).getCardNum())){
				System.out.println(userList.get(i));
				break;
			}else{
				System.out.println("不存在这准考证号");
			}
		}
	}
	
	/**
	 * 修改个人信息
	 * @param cardNum
	 * @param pro
	 * @param city
	 * @param mm
	 * @param dh
	 * @return
	 */
	public Boolean updateZJ(String cardNum,String pro,String city,String mm,String dh){
		
		//名字修改
		boolean falg=false;
	
		//先要查找到
		for(int i=0;i<userList.size();i++){
			String name = userList.get(i).getCardNum();
			if(cardNum.equals(name)){
				userList.get(i).setProvince(pro);
				userList.get(i).setCity(city);
				userList.get(i).setPass(mm);;
				userList.get(i).setAddress(dh);
				falg=true;
			}
		}
		return falg;
	}
	
	//查询本市(登录用户所在的城市)的总分状元
	/**
	 * 
	 * @param num 登陆的考生准考证号
	 * @return 当前城市的总分状元
	 */
	public User cityTop1(String num){
		
		String cityName=null;
		//有准考证号获得对应的城市
		for(int i=0;i<userList.size();i++){
			String name = userList.get(i).getCardNum();
			if(num.equals(name)){
				cityName=userList.get(i).getCity();
			}
		}
		
		//存放最高分的考生
		double maxMark=0;
		
		//考生的下标
		int xb=-1;
		
		//对同一城市的考生总分进行比较
		for(int i=0;i<userList.size();i++){
			
			User u=userList.get(i);
			
			if(cityName.equals(u.getCity())){
				
				//同一城市下考生总分
				double total=u.getChineseScore()+u.getMathScore()+u.getEnglishScore();
				
				if(total>maxMark){
					maxMark=total;
					xb++;
				}
			}
		}
		if(xb==-1){
			System.out.println("考生成绩还没公布");
			return userList.get(0);
		}
		return userList.get(xb);
	}
	
	
	//查询全国各个省份的状元
	/**
	 * 各个省份的状元
	 */
	public void provinceTop(){
		
		//存放各省,利用不能重复的特点
		Set<String> proSet=new HashSet<String>();
		
		for(int i=0;i<userList.size();i++){
				proSet.add(userList.get(i).getProvince());
		}
		
		Iterator<String> it = proSet.iterator();
		while(it.hasNext()){
			
			String pro = it.next();
			double maxMark=0;
			int xb=-1;
			for(int i=0;i<userList.size();i++){
				if(pro.equals(userList.get(i).getProvince())){
					double total=userList.get(i).getChineseScore()+userList.get(i).getMathScore()+userList.get(i).getEnglishScore();
					if(total>maxMark){
						maxMark=total;
						xb=i;
					}
				}
			}
			
			//循环一次打印一个省的状元
			System.out.println(pro+"省的状元是："+userList.get(xb)+"总分："+maxMark);
		}
		
	}
	
	
//统计分析报表statistics
	/**
	 * 1 查询各个省份500-600分的总人数并由高到低排列显示
	 * 2 查询各个省份过600分的总人数并由低到高排列显示
	 * 
	 * 
	 * @param no 选择功能
	 */
	public void statistics(int no){
		
		//存放各省,利用不能重复的特点
		Set<String> proSet=new HashSet<String>();
		
		List<User> newUser=new ArrayList<User>();
		
		for(int i=0;i<userList.size();i++){
			proSet.add(userList.get(i).getProvince());
		}
		
		Iterator<String> it = proSet.iterator();
		
		if(1==no){
			
			while(it.hasNext()){
				
				String pro = it.next();
				double maxMark=0;
				int xb=-1;
				for(int i=0;i<userList.size();i++){
					if(pro.equals(userList.get(i).getProvince())){
						double total=userList.get(i).getChineseScore()+userList.get(i).getMathScore()+userList.get(i).getEnglishScore();
						
						//赋值总分
						userList.get(i).setTotal(total);
						if(total>=500 && total<=600){
							
							//存放在新的数组   
							newUser.add(userList.get(i));
							
						}
					}
				}
				//排序  Collections.sort
				Collections.sort(newUser);
				
				//循环一次打印一个省的考生
				for (User user : newUser) {
					System.out.println(pro+"省的500到600分的考生："+user);
				}
				
			}
			
		}
		
	}
	
	
}
